home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume4 / hershey / part1 next >
Encoding:
Internet Message Format  |  1986-11-30  |  37.3 KB

  1. From: talcott!topaz!pyramid!octopus!pete (Pete Holzmann)
  2. Subject: Hershey Fonts, Part 1 of 5
  3. Newsgroups: mod.sources
  4. Approved: jpn@panda.UUCP
  5.  
  6. Mod.sources:  Volume 4, Issue 42
  7. Submitted by: pyramid!octopus!pete (Pete Holzmann)
  8.  
  9.  
  10. This is part 1 of five parts of the first Usenet distribution of
  11. the Hershey Fonts. See the README file for more details.
  12.  
  13.  
  14. Peter Holzmann, Octopus Enterprises
  15. USPS: 19611 La Mar Court, Cupertino, CA 95014
  16. UUCP: {hplabs!hpdsd,pyramid}!octopus!pete
  17. Phone: 408/996-7746
  18.  
  19.  
  20. #!/bin/sh
  21. # This is a shell archive, meaning:
  22. # 1. Remove everything above the #!/bin/sh line.
  23. # 2. Save the resulting text in a file.
  24. # 3. Execute the file with /bin/sh (not csh) to create the files:
  25. #    README
  26. #    hershey.doc
  27. #    hershey.f77
  28. #    hershey.c
  29. #    cyrilc.hmp
  30. #    gothgbt.hmp
  31. #    gothgrt.hmp
  32. #    gothitt.hmp
  33. #    greekc.hmp
  34. #    greekcs.hmp
  35. #    greekp.hmp
  36. #    greeks.hmp
  37. #    italicc.hmp
  38. #    italiccs.hmp
  39. #    italict.hmp
  40. #    romanc.hmp
  41. #    romancs.hmp
  42. #    romand.hmp
  43. #    romanp.hmp
  44. #    romans.hmp
  45. #    romant.hmp
  46. #    scriptc.hmp
  47. #    scripts.hmp
  48. # This archive created: Thu Mar 27 17:50:24 1986
  49. export PATH; PATH=/bin:$PATH
  50. if test -f 'README'
  51. then
  52.     echo shar: over-writing existing file "'README'"
  53. fi
  54. cat << \SHAR_EOF > 'README'
  55. This distribution is made possible through the collective encouragement
  56. of the Usenet Font Consortium, a mailing list that sprang to life to get
  57. this accomplished and that will now most likely disappear into the mists
  58. of time... Thanks are especially due to Jim Hurt, who provided the packed
  59. font data for the distribution, along with a lot of other help.
  60.  
  61. This file describes the Hershey Fonts in general, along with a description of
  62. the other files in this distribution and a simple re-distribution restriction.
  63.  
  64. USE RESTRICTION:
  65.     This distribution of the Hershey Fonts may be used by anyone for
  66.     any purpose, commercial or otherwise, providing that:
  67.         1. The following acknowledgements must be distributed with
  68.             the font data:
  69.             - The Hershey Fonts were originally created by Dr.
  70.                 A. V. Hershey while working at the U. S.
  71.                 National Bureau of Standards.
  72.             - The format of the Font data in this distribution
  73.                 was originally created by
  74.                     James Hurt
  75.                     Cognition, Inc.
  76.                     900 Technology Park Drive
  77.                     Billerica, MA 01821
  78.                     (mit-eddie!ci-dandelion!hurt)
  79.         2. The font data in this distribution may be converted into
  80.             any other format *EXCEPT* the format distributed by
  81.             the U.S. NTIS (which organization holds the rights
  82.             to the distribution and use of the font data in that
  83.             particular format). Not that anybody would really
  84.             *want* to use their format... each point is described
  85.             in eight bytes as "xxx yyy:", where xxx and yyy are
  86.             the coordinate values as ASCII numbers.
  87.  
  88. *PLEASE* be reassured: The legal implications of NTIS' attempt to control
  89. a particular form of the Hershey Fonts *are* troubling. HOWEVER: We have
  90. been endlessly and repeatedly assured by NTIS that they do not care what
  91. we do with our version of the font data, they do not want to know about it,
  92. they understand that we are distributing this information all over the world,
  93. etc etc etc... but because it isn't in their *exact* distribution format, they
  94. just don't care!!! So go ahead and use the data with a clear conscience! (If
  95. you feel bad about it, take a smaller deduction for something on your taxes
  96. next week...)
  97.  
  98. The Hershey Fonts:
  99.     - are a set of more than 2000 glyph (symbol) descriptions in vector 
  100.         ( <x,y> point-to-point ) format
  101.     - can be grouped as almost 20 'occidental' (english, greek,
  102.         cyrillic) fonts, 3 or more 'oriental' (Kanji, Hiragana,
  103.         and Katakana) fonts, and a few hundred miscellaneous
  104.         symbols (mathematical, musical, cartographic, etc etc)
  105.     - are suitable for typographic quality output on a vector device
  106.         (such as a plotter) when used at an appropriate scale.
  107.     - were digitized by Dr. A. V. Hershey while working for the U.S.
  108.         Government National Bureau of Standards (NBS).
  109.     - are in the public domain, with a few caveats:
  110.         - They are available from NTIS (National Technical Info.
  111.             Service) in a computer-readable from which is *not*
  112.             in the public domain. This format is described in
  113.             a hardcopy publication "Tables of Coordinates for
  114.             Hershey's Repertory of Occidental Type Fonts and
  115.             Graphic Symbols" available from NTIS for less than
  116.             $20 US (phone number +1 703 487 4763).
  117.         - NTIS does not care about and doesn't want to know about
  118.             what happens to Hershey Font data that is not
  119.             distributed in their exact format.
  120.         - This distribution is not in the NTIS format, and thus is
  121.             only subject to the simple restriction described
  122.             at the top of this file.
  123.  
  124. Hard Copy samples of the Hershey Fonts are best obtained by purchasing the
  125. book described above from NTIS. It contains a sample of all of the Occidental
  126. symbols (but none of the Oriental symbols).
  127.  
  128. This distribution:
  129.     - contains
  130.         * a complete copy of the Font data using the original
  131.             glyph-numbering sequence
  132.         * a set of translation tables that could be used to generate
  133.             ASCII-sequence fonts in various typestyles
  134.         * a couple of sample programs in C and Fortran that are
  135.             capable of parsing the font data and displaying it
  136.             on a graphic device (we recommend that if you
  137.             wish to write programs using the fonts, you should
  138.             hack up one of these until it works on your system)
  139.             
  140.     - consists of the following files...
  141.         hershey.doc - details of the font data format, typestyles and
  142.                 symbols included, etc.
  143.         hersh.oc[1-4] - The Occidental font data (these files can
  144.                     be catenated into one large database)
  145.         hersh.or[1-4] - The Oriental font data (likewise here)
  146.         *.hmp - Occidental font map files. Each file is a translation
  147.                 table from Hershey glyph numbers to ASCII
  148.                 sequence for a particular typestyle.
  149.         hershey.f77 - A fortran program that reads and displays all
  150.                 of the glyphs in a Hershey font file.
  151.         hershey.c   - The same, in C, using GKS, for MS-DOS and the
  152.                 PC-Color Graphics Adaptor.
  153.  
  154. Additional Work To Be Done (volunteers welcome!):
  155.  
  156.     - Integrate this complete set of data with the hershey font typesetting
  157.         program recently distributed to mod.sources
  158.     - Come up with an integrated data structure and supporting routines
  159.         that make use of the ASCII translation tables
  160.     - Digitize additional characters for the few places where non-ideal
  161.         symbol substitutions were made in the ASCII translation tables.
  162.     - Make a version of the demo program (hershey.c or hershey.f77) that
  163.         uses the standard Un*x plot routines.
  164.     - Write a banner-style program using Hershey Fonts for input and
  165.         non-graphic terminals or printers for output.
  166.     - Anything else you'd like!
  167. SHAR_EOF
  168. if test -f 'hershey.doc'
  169. then
  170.     echo shar: over-writing existing file "'hershey.doc'"
  171. fi
  172. cat << \SHAR_EOF > 'hershey.doc'
  173. This file provides a brief description of the contents of the Occidental
  174. Hershey Font Files. For a complete listing of the fonts in hard copy, order
  175. NBS Special Publication 424, "A contribution to computer typesetting 
  176. techniques: Tables of Coordinates for Hershey's Repertory of Occidental
  177. Type Fonts and Graphic Symbols". You can get it from NTIS (phone number is
  178. +1 703 487 4763) for less than twenty dollars US.
  179.  
  180. Basic Glyph (symbol) data:
  181.  
  182.         hersh.oc1       - numbers 1 to 1199
  183.         hersh.oc2       - numbers 1200 to 2499
  184.         hersh.oc3       - numbers 2500 to 3199
  185.         hersh.oc4       - numbers 3200 to 3999
  186.  
  187.         These four files contain approximately 19 different fonts in
  188. the A-Z alphabet plus greek and cyrillic, along with hundreds of special
  189. symbols, described generically below.
  190.  
  191.         There are also four files of Oriental fonts (hersh.or[1-4]). These
  192. files contain symbols from three Japanese alphabets (Kanji, Hiragana, and
  193. Katakana). It is unknown what other symbols may be contained therein, nor
  194. is it known what order the symbols are in (I don't know Japanese!).
  195.  
  196.         Back to the Occidental files:
  197.  
  198. Fonts:
  199.         Roman: Plain, Simplex, Duplex, Complex Small, Complex, Triplex
  200.         Italic: Complex Small, Complex, Triplex
  201.         Script: Simplex, Complex
  202.         Gothic: German, English, Italian
  203.         Greek: Plain, Simplex, Complex Small, Complex
  204.         Cyrillic: Complex
  205.  
  206. Symbols:
  207.         Mathematical (227-229,232,727-779,732,737-740,1227-1270,2227-2270,
  208.                         1294-1412,2294-2295,2401-2412)
  209.         Daggers (for footnotes, etc) (1276-1279, 2276-2279)
  210.         Astronomical (1281-1293,2281-2293)
  211.         Astrological (2301-2312)
  212.         Musical (2317-2382)
  213.         Typesetting (ffl,fl,fi sorts of things) (miscellaneous places)
  214.         Miscellaneous (mostly in 741-909, but also elsewhere):
  215.                 - Playing card suits
  216.                 - Meteorology
  217.                 - Graphics (lines, curves)
  218.                 - Electrical
  219.                 - Geometric (shapes)
  220.                 - Cartographic
  221.                 - Naval
  222.                 - Agricultural
  223.                 - Highways
  224.                 - Etc...
  225.  
  226.  
  227. ASCII sequence translation files:
  228.  
  229.         The Hershey glyphs, while in a particular order, are not in an
  230.         ASCII sequence. I have provided translation files that give the
  231.         sequence of glyph numbers that will most closely approximate the
  232.         ASCII printing sequence (from space through ~, with the degree
  233.         circle tacked on at the end) for each of the above fonts:
  234.  
  235.         File names are made up of fffffftt.hmp,
  236.  
  237.                 where ffffff is the font style, one of:
  238.                         roman   Roman
  239.                         greek   Greek
  240.                         italic  Italic
  241.                         script  Script
  242.                         cyril   Cyrillic (some characters not placed in
  243.                                            the ASCII sequence)
  244.                         gothgr  Gothic German
  245.                         gothgb  Gothic English
  246.                         gothit  Gothic Italian
  247.  
  248.                 and tt is the font type, one of:
  249.                     p       Plain (very small, no lower case)
  250.                     s       Simplex (plain, normal size, no serifs)
  251.                     d       Duplex (normal size, no serifs, doubled lines)
  252.                     c       Complex (normal size, serifs, doubled lines)
  253.                     t       Triplex (normal size, serifs, tripled lines)
  254.                     cs      Complex Small (Complex, smaller than normal size)
  255.  
  256. The three sizes are coded with particular base line (bottom of a capital
  257.         letter) and cap line (top of a capital letter) values for 'y':
  258.  
  259.         Size            Base Line       Cap Line
  260.  
  261.         Very Small         -5              +4 
  262.         Small              -6              +7
  263.         Normal             -9              +12
  264.  
  265.         (Note: some glyphs in the 'Very Small' fonts are actually 'Small')
  266.  
  267. The top line and bottom line, which are normally used to define vertical
  268.         spacing, are not given. Maybe somebody can determine appropriate
  269.         values for these!
  270.  
  271. The left line and right line, which are used to define horizontal spacing,
  272.         are provided with each character in the database.
  273. SHAR_EOF
  274. if test -f 'hershey.f77'
  275. then
  276.     echo shar: over-writing existing file "'hershey.f77'"
  277. fi
  278. cat << \SHAR_EOF > 'hershey.f77'
  279. c     .. display all of the Hershey font data
  280. c
  281. c     .. By James Hurt when with
  282. c     ..    Deere and Company
  283. c     ..    John Deere Road
  284. c     ..    Moline, IL 61265
  285. c
  286. c     .. Author now with Cognition, Inc.
  287. c     ..                 900 Technology Park Drive
  288. c     ..                 Billerica, MA 01821
  289. c
  290. c     .. graphics subroutines
  291. c     .. identy - initialize graphics
  292. c     .. vwport - set where to display image on screen
  293. c     ..        - full screen is 0.0 to 100.0 in vertical (y) direction
  294. c     ..        -                0.0 to ???.? in horizontal (x) direction
  295. c     ..        - origin is lower left corner of screen
  296. c     .. window - set window limits in world coordinates
  297. c     .. newpag - if action left to be take on existing screen, take it
  298. c     ..        - then take actions to start with a blank screen
  299. c     .. jnumbr - display an integer (code included)
  300. c     .. move   - set current cursor position to (x,y)
  301. c     .. draw   - draw from current cursor position to (x,y)
  302. c     ..        - then set current cursor position to (x,y)
  303. c     ..        - The point (x,y) is always in world coordinates
  304. c     .. skip   - Make the next draw really be a move
  305. c     .. waitcr - finish all graphics actions then let the user look at
  306. c     ..        - the image.  User signals (usually by pressing RETURN)
  307. c     ..        - when it is safe to continue.
  308. c     .. grstop - finish all graphics routines (no more graphics to follow)
  309. c
  310.       external identy,vwport,window,newpag,jnumbr,move ,draw ,skip,
  311.      x         waitcr,grstop
  312. c     .. local variables
  313.       real deltac, deltar, colmax
  314.       parameter (deltac = 6.25, deltar = 6.25, colmax = 100.0)
  315. c     .. font data file name
  316.       character*80 name
  317. c     .. font data
  318.       character*1 line(2,256)
  319. c     .. co-ordinates
  320.       real x,y,col,row
  321. c     .. which data point and which character
  322.       integer ipnt,ich,nch,i
  323.       intrinsic ichar
  324. cexecutable code begins
  325. c     .. file unit number
  326.       kfile=1
  327. c     .. get hershey file name
  328.       write(*,'(a)') ' packed hershey font file name'
  329.       read(*,'(a)') name
  330.       open(unit=kfile,file=name,status='old')
  331. c     .. initialize graphics
  332.       call identy
  333. c     .. want square picture for each character
  334. c     .. Note: most but not all Hershey font characters fit inside this window
  335.       call window(-15.0, 15.0,-15.0, 15.0)
  336. c     .. loop per screen
  337. 5     continue
  338. c     .. start with a clean sheet
  339.       call newpag
  340. c     .. where to display this character
  341.       col = 0.0
  342.       row = 100.0
  343. c     .. loop per character
  344. 10    continue
  345. c     .. read character number and data
  346.       read(unit=kfile,'(i5,i3,64a1/(72a1))',end=90) ich,nch,
  347.      x     (line(1,i),line(2,i),i=1,nch)
  348. c     .. select view port (place character on screen)
  349.       call vwport(col,col+deltac,row-deltar,row)
  350. c     .. identify character
  351.       call jnumbr(ich,4,-15.0,9.0,5.0)
  352. c     .. draw character limits
  353. c     .. Note: this data can be used for proportional spacing
  354.       x=ichar(line(1,1))-ichar('R')
  355.       y=ichar(line(2,1))-ichar('R')
  356.       call move(x,-10.0)
  357.       call draw(x,10.0)
  358.       call move(y,-10.0)
  359.       call draw(y,10.0)
  360. c     .. first data point is a move
  361.       call skip
  362. c     .. loop per line of data
  363.       do 20 ipnt = 2, nch
  364. c     .. process vector number ipnt
  365.       if(line(1,ipnt).eq.' ') then
  366. c        .. next data point is a move
  367.          call skip
  368.       else
  369. c        .. draw (or move) to this data point
  370.          x=ichar(line(1,ipnt))-ichar('R')
  371.          y=ichar(line(2,ipnt))-ichar('R')
  372. c        .. Note that Hershey Font data is in TV coordinate system
  373.          call draw(x,-y)
  374.       endif
  375. 20    continue
  376. c     .. end of this character
  377.       col = col + deltac
  378.       if( col .lt. colmax ) go to 10
  379.       col = 0.0
  380.       row = row - deltar
  381.       if( row .ge. deltar ) go to 10
  382.       call waitcr
  383.       go to 5
  384. 90    continue
  385.       call waitcr
  386. c     .. all done
  387.       call grstop
  388.       end
  389.       subroutine jnumbr( number, iwidth, x0, y0, height )
  390.       integer number, iwidth
  391.       real x0, y0, height
  392. c     .. draw one of the decimal digits
  393. c     .. number = the integer to be displayed
  394. c     .. iwidth = the number of characters
  395. c     .. (x0, y0) = the lower left corner
  396. c     .. height = height of the characters
  397. c
  398. c
  399. c     .. By James Hurt when with
  400. c     ..    Deere and Company
  401. c     ..    John Deere Road
  402. c     ..    Moline, IL 61265
  403. c
  404. c     .. Author now with Cognition, Inc.
  405. c     ..                 900 Technology Park Drive
  406. c     ..                 Billerica, MA 01821
  407. c
  408. c     .. graphics (graphics) routines called
  409.       external skip,draw
  410. c     .. local variables used
  411.       integer ipnt, ipos, ival, idigit
  412.       real x, y, scale
  413.       real xleft, ylower
  414. c     .. character data for the ten decimal digit characters
  415. c     .. data extracted from one of the Hershey fonts
  416.       integer start(0:10), power(0:9)
  417.       character*1 line(2,104)
  418.       data power/ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
  419.      x 100000000, 1000000000 /
  420.       data start/0,11,14,22,36,42,55,68,73,91,104/
  421. c 0:poly(4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,7 6,6 8,4 9)
  422. c 1:poly(2 7,4 9,4 0)
  423. c 2:poly(1 8,3 9,5 9,7 8,7 6,6 4,1 0,7 0)
  424. c 3:poly(1 8,3 9,5 9,7 8,7 6,5 5)
  425. c   poly(4 5,5 5,7 4,7 1,5 0,3 0,1 1)
  426. c 4:poly(5 9,5 0)
  427. c   poly(5 9,0 3,8 3)
  428. c 5:poly(2 9,1 5,3 6,4 6,6 5,7 3,6 1,4 0,3 0,1 1)
  429. c   poly(2 9,6 9)
  430. c 6:poly(6 9,4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,6 5,4 6,2 5,1 3)
  431. c 7:poly(7 9,3 0)
  432. c   poly(1 9,7 9)
  433. c 8:poly(3 9,1 8,1 6,3 5,5 5,7 6,7 8,5 9,3 9)
  434. c   poly(3 5,1 4,1 1,3 0,5 0,7 1,7 4,5 5)
  435. c 9:poly(7 6,6 4,4 3,2 4,1 6,2 8,4 9,6 8,7 6,7 3,6 1,4 0,2 0)
  436. c
  437.       data line/'R','M','P','N','O','P','O','S','P','U','R','V','T','U',
  438.      A'U','S','U','P','T','N','R','M','P','O','R','M','R
  439.      B','V','O','N','Q','M','S','M','U','N','U','P','T','R','O',
  440.      C'V','U','V','O','N','Q','M','S','M','U','N','U','P','S','Q
  441.      D',' ','R','R','Q','S','Q','U','R','U','U','S','V','Q','V','O','U',
  442.      E'S','M','S','V',' ','R','S','M','N','S','V','S','P
  443.      F','M','O','Q','Q','P','R','P','T','Q','U','S','T','U','R','V','Q',
  444.      G'V','O','U',' ','R','P','M','T','M','T','M','R','M','P','N
  445.      H','O','P','O','S','P','U','R','V','T','U','U','S','T','Q','R','P',
  446.      I'P','Q','O','S','U','M','Q','V',' ','R','O','M','U','M',
  447.      J'Q','M','O','N','O','P','Q','Q','S','Q','U','P','U','N','S',
  448.      K'M','Q','M',' ','R','Q','Q','O','R','O','U','Q','V','S','V','U','U
  449.      L','U','R','S','Q','U','P','T','R','R','S','P','R','O','P',
  450.      M'P','N','R','M','T','N','U','P','U','S','T','U','R','V','P','V'/
  451. c     .. compute scale factor and lower left of first digit
  452.       scale = height/10.0
  453.       xleft = x0
  454.       ylower = y0
  455.       ival = number
  456. c     .. loop for each position
  457.       do 30 ipos = iwidth,1,-1
  458.          idigit = mod( ival/power(ipos-1), 10 )
  459. c        .. first data point is a move
  460.          call skip
  461. c        .. loop over data for this digit
  462.          do 20 ipnt=start(idigit)+1,start(idigit+1)
  463.             if(line(1,ipnt).eq.' ') then
  464. c              .. next data point is a move
  465.                call skip
  466.             else
  467. c              .. draw (or move) to this data point
  468.                x=ichar(line(1,ipnt))-ichar('N')
  469.                y=ichar(line(2,ipnt))-ichar('V')
  470.                call draw(xleft+scale*x,ylower-scale*y)
  471.             endif
  472. 20       continue
  473. c        .. move for next digit
  474.          xleft = xleft + height
  475. 30    continue
  476.       end
  477.  
  478. SHAR_EOF
  479. if test -f 'hershey.c'
  480. then
  481.     echo shar: over-writing existing file "'hershey.c'"
  482. fi
  483. cat << \SHAR_EOF > 'hershey.c'
  484. #include "cgksincl.h"
  485. #include <stdio.h>
  486.  
  487. #ifndef TRUE
  488. #define TRUE 1
  489. #define FALSE 0
  490. #endif
  491.  
  492. /*
  493.  * hershey.c   Display all of the Hershey font data in a font file
  494.  *
  495.  * This sample program is intended more so the user can see how the
  496.  * font data is read and used in an (admittedly minimal) application,
  497.  * than as a useable program.
  498.  *
  499.  * Its function is to display all of the hershey font characters on-screen,
  500.  * in a format 8 characters across and 8 vertical.
  501.  *
  502.  * usage:
  503.  *    hershey <device> <fontfile>
  504.  *
  505.  *       where <device> is a supported device ('c' for pc-cga is all
  506.  *                      in this version)
  507.  *             <fontfile> is the name of a hershey font file, e.g.
  508.  *                      hersh.oc1
  509.  *
  510.  * Translated from Fortran to C and GKS (that's why it looks wierd!)
  511.  *    (PRIOR Data Sciences non-ANSI GKS binding used here. Sorry!
  512.  *     Somebody else is welcome to translate to the ANSI binding)
  513.  *
  514.  */
  515.  
  516. /*
  517.      Translated by Pete Holzmann
  518.          Octopus Enterprises
  519.          19611 La Mar Court
  520.          Cupertino, CA 95014
  521.  
  522.       Original...  
  523.      .. By James Hurt when with
  524.      ..    Deere and Company
  525.      ..    John Deere Road
  526.      ..    Moline, IL 61265
  527.  
  528.      .. now with Cognition, Inc.
  529.      ..          900 Technology Park Drive
  530.      ..          Billerica, MA 01821
  531. */
  532.  
  533. /* local variables */
  534.    /* the next variables set the percent-of-screen used for each
  535.       character. 'colmax' should be left at 100. */
  536.  
  537.       float deltac = 12.5, deltar = 12.5, colmax = 100.0;
  538.  
  539.        FILE    *INfile,*OUTfile,*fopen(); /* some files */
  540.  
  541.       /* some variables to record the largest bounding rectangle of
  542.          the displayed characters. Printed when all finished. */
  543.  
  544.       int minx = 999,miny = 999,maxx=-999,maxy=-999;
  545.  
  546. /*    .. font data file name */
  547.       char name[80];
  548.  
  549. /* a forward referenced function */
  550.       void jnumbr();
  551.  
  552.    float aspect = 1.2;  /* PC graphics screen aspect ratio */
  553.  
  554. /* GKS local variables */
  555.  
  556.    int cga();           /* device initializer function */
  557.     int    (*wsinitf)();  /* pointer to the initializer function */
  558.     Ws_id   wss_xxxx;    /* workstation id (an int) */
  559.     Int     wstyp;         /* ws type, and some vars */
  560.     Drect    maxsurf;       /* max device surface rectangle */
  561.     Int    rastunit[2];   /* device surface in raster units */
  562.  
  563.     Wc    p1[2];            /* two world coordinates */
  564.  
  565. /* world coordinate windows */
  566.     Wrect    wrect  = {-17,-17,17,17};
  567. /* NDC coordinate viewport and windows */
  568.     Nrect    nrect = {0.0, 0.0, 1.0, 1.0};
  569. /* DC coordinate viewport */
  570.     Drect    drect = {0.0, 0.0, 319.0, 199.0}; /* work area */
  571.  
  572.  
  573. /*
  574.  * scanint: a function to scan an integer, using n characters of
  575.  *          the input file, ignoring newlines. (scanf won't work
  576.  *          because it also ignores blanks)
  577.  */
  578. int scanint(file,n)
  579. FILE *file;
  580. int n;
  581. {
  582. char buf[20];
  583. int i,c;
  584.  
  585.    for (i=0;i<n;i++){
  586.       while ((c = fgetc(file)) == '\n') ; /* discard spare newlines */
  587.       if (c == EOF) return(-1);
  588.        buf[i] = c;
  589.    }
  590.    
  591.    buf[i] = 0;
  592.    return(atoi(buf));
  593. }
  594.  
  595. /*
  596.  * Convert desired viewport in percentages into Normalized Device Coords
  597.  * (NDC) for GKS
  598.  */
  599.  
  600. setview(minx,miny,maxx,maxy)
  601. float minx,miny,maxx,maxy;
  602. {
  603.    Nrect newview;
  604.  
  605.    newview.n_ll.n_x = minx*nrect.n_ur.n_x/100.0;
  606.    newview.n_ll.n_y = miny*nrect.n_ur.n_y/100.0;
  607.    newview.n_ur.n_x = maxx*nrect.n_ur.n_x/100.0;
  608.    newview.n_ur.n_y = maxy*nrect.n_ur.n_y/100.0;
  609.    /* use normalization transformation number 1 */
  610.    s_viewport(1,&newview);
  611. }
  612.  
  613. /*
  614.  * GKS uses a polyline function instead of skip, draw and move
  615.  *    functions. The following routines translate from skip/draw/move
  616.  *    to polyline:
  617.  */
  618.  
  619. int skipflag = 1; /* 1 if next draw is 'pen up' */
  620. int oldx,oldy;
  621.  
  622. static void
  623. skip()
  624. {
  625. skipflag = TRUE;
  626. }
  627.  
  628. static void
  629. draw(newx,newy)
  630. int newx,newy;
  631. {
  632.    if (!skipflag) {
  633.       p1[0].w_x = oldx;
  634.       p1[0].w_y = oldy;
  635.       p1[1].w_x = newx;
  636.       p1[1].w_y = newy;
  637.       polyline(2,p1);
  638.    }
  639.    skipflag = FALSE;
  640.    oldx = newx;
  641.    oldy = newy;
  642. }
  643.  
  644. /*
  645.  * The main program...
  646.  */
  647.  
  648. main(argc,argv)
  649. int argc;
  650. char **argv;
  651. {
  652. /*    .. file unit number */
  653.       FILE *kfile,*f1,*f2;
  654. /*    .. font data   */
  655.       char line[2][256];
  656.       int x,y;
  657.       float col,row;
  658. /*    .. which data point and which character */
  659.       int     ipnt,ich,nch,i,ichar;
  660.  
  661.         if (argc != 3) {
  662.          printf("usage: hershey [c,<other devices?>] file\n");
  663.          exit(1);
  664.       }
  665.  
  666.         switch (*argv[1]) {
  667.          case 'c':  wsinitf = cga; break;
  668.              default:
  669.                     printf("usage: hershey [c,<other devices?>] file\n");
  670.                     exit(1);
  671.         }
  672.  
  673.    /* get GKS started */
  674.  
  675.     open_gks((Ercode (*)())NULL,(Erarea *)NULL,(Size)NULL,(String) "");
  676.           OUTfile=stdout;
  677.          INfile = NULL;
  678.  
  679.     wss_xxxx = open_ws(INfile, OUTfile, wsinitf);
  680.  
  681.     activate(wss_xxxx);
  682.  
  683.    nrect.n_ur.n_y /= aspect;  /* correct NDC square for pixel aspect ratio */
  684.  
  685.     /* adjust drect to be the biggest square possible, and adjust for
  686.       aspect ratio */
  687.  
  688.    drect.d_ur.d_x = drect.d_ur.d_y * aspect;
  689.  
  690. /* set up the normalization transformation (number 1) from WC to NDC */
  691.     s_window  (1, &wrect);
  692.     s_viewport(1, &nrect);
  693.    s_clip(FALSE);
  694.     sel_cntran(1);
  695. /* set up the workstation transformation from NDC to DC */
  696.     s_w_wind(wss_xxxx, &nrect);
  697.     s_w_view(wss_xxxx, &drect);
  698.     update(wss_xxxx,1);
  699.  
  700. /*
  701.  * GKS is all set up now, so let's get started...
  702.  */
  703.  
  704. /*    .. get hershey file name */
  705.       if (!(kfile = fopen(argv[2],"r"))) {
  706.          fprintf(stderr,"Can't open font file '%s'\n",argv[1]);
  707.          exit(1);
  708.          }
  709.  
  710. /*    .. loop per screen */
  711. label5:
  712. /*             .. start with a clean sheet */
  713.       clear(wss_xxxx);
  714.  
  715. /*    .. where to display this character */
  716.       col = 0.0;
  717.       row = 100.0;
  718.  
  719. /*             .. loop per character */
  720.       while (TRUE) {
  721.  
  722. /*             .. read character number and data */
  723.       if ((ich = scanint(kfile,5)) < 1) {
  724.              deactivate(wss_xxxx);
  725.             getchar();
  726.              close_ws(wss_xxxx);
  727.              close_gks();
  728.             printf("\nDone\n");
  729.             printf("min,max = (%d,%d) (%d,%d)\n",minx,miny,maxx,maxy);
  730.             exit(0);
  731.       }
  732.       nch = scanint(kfile,3);
  733.  
  734.       for (i=0; i<nch;i++) {
  735.          if ((i==32) ||(i==68) ||(i==104) ||(i==140)) fgetc(kfile); /* skip newlines */
  736.          line[0][i] = fgetc(kfile);
  737.          line[1][i] = fgetc(kfile);
  738.       }
  739.       fgetc(kfile);
  740.  
  741. /*             .. select view port (place character on screen) */
  742.       setview(col,row-deltar,col+deltac,row);
  743.  
  744. /*             .. identify character */
  745.  
  746.         jnumbr(ich,4,-15.0,-16.0,6.0);
  747.  
  748. /*             .. draw left and right lines */
  749. /*             .. Note: this data can be used for proportional spacing */
  750.  
  751.       x=(int)line[0][0] - (int)'R';
  752.       y=(int)line[1][0] - (int)'R';
  753.  
  754.       skip();
  755.       draw(x,-10);draw(x,10);
  756.       skip();
  757.       draw(y,-10);draw(y,10);
  758.  
  759.  
  760. /*             .. first data point is a move */
  761.       skip();
  762. /*             .. loop per line of data */
  763.     for (ipnt=1;ipnt<nch;ipnt++) {
  764.  
  765. /*             .. process vector number ipnt */
  766.       if (line[0][ipnt] == ' ') {
  767. /*                .. next data point is a move */
  768.          skip();
  769.       } else {
  770. /*                .. draw (or move) to this data point */
  771.          x=(int)line[0][ipnt] -(int) 'R';
  772.          y=(int)line[1][ipnt] -(int) 'R';
  773.          if (x < minx) minx = x;
  774.          if (x >maxx) maxx = x;
  775.          if (-y < miny) miny = -y;
  776.          if (-y >maxy) maxy = -y;
  777. /*                .. Note that Hershey Font data is in TV coordinate system */
  778.            draw(x,-y);
  779.       }
  780.     } /* for loop */
  781. /*             .. end of this character */
  782.  
  783.       if( (col += deltac) < colmax )
  784.          continue;
  785.       col = 0.0;
  786.       if( (row -= deltar) >= deltar ) 
  787.          continue;
  788.  
  789.       getchar();     /* wait for user to hit a newline */
  790.       goto label5;
  791.    } /* while true */
  792. /*             .. all done */
  793.       exit();
  794. }
  795.  
  796.  
  797.       long power[] ={ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
  798.           100000000, 1000000000 };
  799.       int  start[] ={0,11,14,22,36,42,55,68,73,91,104};
  800. /*         0:poly(4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,7 6,6 8,4 9) */
  801. /*         1:poly(2 7,4 9,4 0) */
  802. /*         2:poly(1 8,3 9,5 9,7 8,7 6,6 4,1 0,7 0) */
  803. /*         3:poly(1 8,3 9,5 9,7 8,7 6,5 5) */
  804. /*           poly(4 5,5 5,7 4,7 1,5 0,3 0,1 1) */
  805. /*         4:poly(5 9,5 0) */
  806. /*           poly(5 9,0 3,8 3) */
  807. /*         5:poly(2 9,1 5,3 6,4 6,6 5,7 3,6 1,4 0,3 0,1 1) */
  808. /*           poly(2 9,6 9) */
  809. /*         6:poly(6 9,4 9,2 8,1 6,1 3,2 1,4 0,6 1,7 3,6 5,4 6,2 5,1 3) */
  810. /*         7:poly(7 9,3 0) */
  811. /*           poly(1 9,7 9) */
  812. /*         8:poly(3 9,1 8,1 6,3 5,5 5,7 6,7 8,5 9,3 9) */
  813. /*           poly(3 5,1 4,1 1,3 0,5 0,7 1,7 4,5 5) */
  814. /*         9:poly(7 6,6 4,4 3,2 4,1 6,2 8,4 9,6 8,7 6,7 3,6 1,4 0,2 0) */
  815. /*         */
  816.     char linedat[]={'R','M','P','N','O','P','O','S','P','U','R','V','T','U',
  817.       'U','S','U','P','T','N','R','M','P','O','R','M','R',
  818.         'V','O','N','Q','M','S','M','U','N','U','P','T','R','O',
  819.       'V','U','V','O','N','Q','M','S','M','U','N','U','P','S','Q',
  820.         ' ','R','R','Q','S','Q','U','R','U','U','S','V','Q','V','O','U',
  821.       'S','M','S','V',' ','R','S','M','N','S','V','S','P',
  822.         'M','O','Q','Q','P','R','P','T','Q','U','S','T','U','R','V','Q',
  823.       'V','O','U',' ','R','P','M','T','M','T','M','R','M','P','N',
  824.         'O','P','O','S','P','U','R','V','T','U','U','S','T','Q','R','P',
  825.       'P','Q','O','S','U','M','Q','V',' ','R','O','M','U','M',
  826.       'Q','M','O','N','O','P','Q','Q','S','Q','U','P','U','N','S',
  827.       'M','Q','M',' ','R','Q','Q','O','R','O','U','Q','V','S','V','U','U',
  828.         'U','R','S','Q','U','P','T','R','R','S','P','R','O','P',
  829.       'P','N','R','M','T','N','U','P','U','S','T','U','R','V','P','V'};
  830.  
  831. #define line(a,b) linedat[(b*2+a)]
  832. void
  833. jnumbr( number, iwidth, x0, y0, height )
  834.       int number, iwidth;
  835.       float x0, y0, height;
  836.  
  837. {
  838. /*             .. draw one of the decimal digits */
  839. /*             .. number = the integer to be displayed */
  840. /*             .. iwidth = the number of characters */
  841. /*             .. (x0, y0) = the lower left corner */
  842. /*             .. height = height of the characters */
  843. /*         */
  844. /*         */
  845. /*             .. By James Hurt when with */
  846. /*             ..    Deere and Company */
  847. /*             ..    John Deere Road */
  848. /*             ..    Moline, IL 61265 */
  849. /*         */
  850. /*             .. Author now with Cognition, Inc. */
  851. /*             ..                 900 Technology Park Drive */
  852. /*             ..                 Billerica, MA 01821 */
  853. /*         */
  854.  
  855. /*             .. local variables used */
  856.       int ipnt, ipos, ival, idigit;
  857.       float x, y, scale;
  858.       float xleft, ylower;
  859.  
  860. /*             .. character data for the ten decimal digit characters */
  861. /*             .. data extracted from one of the Hershey fonts */
  862.  
  863. /*            .. compute scale factor and lower left of first digit */
  864.       scale = height/10.0;
  865.       xleft = x0;
  866.       ylower = y0;
  867.       ival = number;
  868.  
  869. /*             .. loop for each character */
  870.  
  871.       for (ipos = iwidth;ipos>=1;ipos--) {
  872.          idigit = (ival/power[ipos-1])% 10;
  873.  
  874. /*                .. first data point is a move */
  875.          skip();
  876.  
  877. /*                .. loop over data for this digit */
  878.          for ( ipnt=start[idigit]; ipnt < start[idigit+1];ipnt++) {
  879.             if(((char)line(0,ipnt)) == ' ') {
  880.                skip();   /* next data point is a move */
  881.             } else {
  882. /*                      .. draw (or move) to this data point */
  883.                x=(int)line(0,ipnt) -(int) 'N';
  884.                y=(int)line(1,ipnt) -(int) 'V';
  885.  
  886.                  draw((int)(xleft+scale*x),(int)(ylower-scale*y));
  887.             }
  888.           } /* data for this digit */
  889. /*                .. move for next digit */
  890.          xleft += height;
  891.        } /* whole string */
  892. }
  893. SHAR_EOF
  894. if test -f 'cyrilc.hmp'
  895. then
  896.     echo shar: over-writing existing file "'cyrilc.hmp'"
  897. fi
  898. cat << \SHAR_EOF > 'cyrilc.hmp'
  899. 2199    2214    2213    2275    2274    2271    2272    2251
  900. 2221    2222    2219    2232    2211    2231    2210    2220
  901. 2200-2209
  902. 2212    2213    2241    2238    2242    2215    2273
  903. 2801-2826
  904. 2223    804     2224    2262    999     2252
  905. 2901-2926
  906. 2225    2229    2226    2246    2218
  907. SHAR_EOF
  908. if test -f 'gothgbt.hmp'
  909. then
  910.     echo shar: over-writing existing file "'gothgbt.hmp'"
  911. fi
  912. cat << \SHAR_EOF > 'gothgbt.hmp'
  913. 3699    3714    3728    2275    3719    2271    3718    3717
  914. 3721    3722    3723    3725    3711    3724    3710    3720
  915. 3700-3709
  916. 3712    3713    2241    3726    2242    3715    2273
  917. 3501-3526
  918. 2223    804     2224    2262    999     3716
  919. 3601-3626
  920. 2225    2229    2226    2246    3729
  921. SHAR_EOF
  922. if test -f 'gothgrt.hmp'
  923. then
  924.     echo shar: over-writing existing file "'gothgrt.hmp'"
  925. fi
  926. cat << \SHAR_EOF > 'gothgrt.hmp'
  927. 3699    3714    3728    2275    3719    2271    3718    3717
  928. 3721    3722    3723    3725    3711    3724    3710    3720
  929. 3700-3709
  930. 3712    3713    2241    3726    2242    3715    2273
  931. 3301-3326
  932. 2223    804     2224    2262    999     3716
  933. 3401-3426
  934. 2225    2229    2226    2246    3729
  935. SHAR_EOF
  936. if test -f 'gothitt.hmp'
  937. then
  938.     echo shar: over-writing existing file "'gothitt.hmp'"
  939. fi
  940. cat << \SHAR_EOF > 'gothitt.hmp'
  941. 3699    3714    3728    2275    3719    2271    3718    3717
  942. 3721    3722    3723    3725    3711    3724    3710    3720
  943. 3700-3709
  944. 3712    3713    2241    3726    2242    3715    2273
  945. 3801-3826
  946. 2223    804     2224    2262    999     3716
  947. 3901-3926
  948. 2225    2229    2226    2246    3729
  949. SHAR_EOF
  950. if test -f 'greekc.hmp'
  951. then
  952.     echo shar: over-writing existing file "'greekc.hmp'"
  953. fi
  954. cat << \SHAR_EOF > 'greekc.hmp'
  955. 2199    2214    2213    2275    2274    2271    2272    2251
  956. 2221    2222    2219    2232    2211    2231    2210    2220
  957. 2200-2209
  958. 2212    2213    2241    2238    2242    2215    2273
  959. 2027-2050       2199    2199
  960. 2223    804     2224    2262    999     2252
  961. 2127-2150       2199    2199
  962. 2225    2229    2226    2246    2218
  963. SHAR_EOF
  964. if test -f 'greekcs.hmp'
  965. then
  966.     echo shar: over-writing existing file "'greekcs.hmp'"
  967. fi
  968. cat << \SHAR_EOF > 'greekcs.hmp'
  969. 1199    1214    1213    1275    1274    1271    1272    1251
  970. 1221    1222    1219    1232    1211    1231    1210    1220
  971. 1200-1209
  972. 1212    1213    1241    1238    1242    1215    1273
  973. 1027-1050       1199    1199
  974. 1223    804     1224    1262    998     1252
  975. 1127-1150       1199    1199
  976. 1225    1229    1226    1246    1218
  977. SHAR_EOF
  978. if test -f 'greekp.hmp'
  979. then
  980.     echo shar: over-writing existing file "'greekp.hmp'"
  981. fi
  982. cat << \SHAR_EOF > 'greekp.hmp'
  983. 199     214     217     233     219     1271    234     231
  984. 221     222     1219    225     211     224     210     220
  985. 200-209
  986. 212     213     1241    226     1242    215     1273
  987. 27-50   199     199
  988. 1223    809     1224    1262    997     230
  989. 27-50   199     199
  990. 1225    223     1226    1246    218
  991.  
  992. SHAR_EOF
  993. if test -f 'greeks.hmp'
  994. then
  995.     echo shar: over-writing existing file "'greeks.hmp'"
  996. fi
  997. cat << \SHAR_EOF > 'greeks.hmp'
  998. 699     714     717     733     719     2271    734     731
  999. 721     722     2219    725     711     724     710     720
  1000. 700-709
  1001. 712     713     2241    726     2242    715     2273
  1002. 527-550 699     699
  1003. 2223    804     2224    2262    999     730
  1004. 627-650 699     699
  1005. 2225    723     2226    2246    718
  1006.  
  1007. SHAR_EOF
  1008. if test -f 'italicc.hmp'
  1009. then
  1010.     echo shar: over-writing existing file "'italicc.hmp'"
  1011. fi
  1012. cat << \SHAR_EOF > 'italicc.hmp'
  1013. 2749    2764    2778    2275    2769    2271    2768    2767
  1014. 2771    2772    2773    2775    2761    2774    2760    2770
  1015. 2750-2759
  1016. 2762    2763    2241    2776    2242    2765    2273
  1017. 2051-2076
  1018. 2223    804     2224    2262    999     2766
  1019. 2151-2176
  1020. 2225    2229    2226    2246    2779
  1021. SHAR_EOF
  1022. if test -f 'italiccs.hmp'
  1023. then
  1024.     echo shar: over-writing existing file "'italiccs.hmp'"
  1025. fi
  1026. cat << \SHAR_EOF > 'italiccs.hmp'
  1027. 1199    1214    1213    1275    1274    1271    1272    1251
  1028. 1221    1222    1219    1232    1211    1231    1210    802
  1029. 1200-1209
  1030. 1212    1213    1241    1238    1242    1215    1273
  1031. 1051-1076
  1032. 1223    804     1224    1262    998     1252
  1033. 1151-1176
  1034. 1225    1229    1226    1246    1218
  1035. SHAR_EOF
  1036. if test -f 'italict.hmp'
  1037. then
  1038.     echo shar: over-writing existing file "'italict.hmp'"
  1039. fi
  1040. cat << \SHAR_EOF > 'italict.hmp'
  1041. 3249    3264    3278    2275    3269    2271    3268    3267
  1042. 3271    3272    3273    3275    3261    3274    3260    3270
  1043. 3250-3259
  1044. 3262    3263    2241    3276    2242    3265    2273
  1045. 3051-3076
  1046. 2223    804     2224    2262    999     3266
  1047. 3151-3176
  1048. 2225    2229    2226    2246    3279
  1049. SHAR_EOF
  1050. if test -f 'romanc.hmp'
  1051. then
  1052.     echo shar: over-writing existing file "'romanc.hmp'"
  1053. fi
  1054. cat << \SHAR_EOF > 'romanc.hmp'
  1055. 2199    2214    2213    2275    2274    2271    2272    2251
  1056. 2221    2222    2219    2232    2211    2231    2210    2220
  1057. 2200-2209
  1058. 2212    2213    2241    2238    2242    2215    2273
  1059. 2001-2026
  1060. 2223    804     2224    2262    999     2252
  1061. 2101-2126
  1062. 2225    2229    2226    2246    2218
  1063. SHAR_EOF
  1064. if test -f 'romancs.hmp'
  1065. then
  1066.     echo shar: over-writing existing file "'romancs.hmp'"
  1067. fi
  1068. cat << \SHAR_EOF > 'romancs.hmp'
  1069. 1199    1214    1213    1275    1274    1271    1272    1251
  1070. 1221    1222    1219    1232    1211    1231    1210    1220
  1071. 1200-1209
  1072. 1212    1213    1241    1238    1242    1215    1273
  1073. 1001-1026
  1074. 1223    804     1224    1262    998     1252
  1075. 1101-1126
  1076. 1225    1229    1226    1246    1218
  1077. SHAR_EOF
  1078. if test -f 'romand.hmp'
  1079. then
  1080.     echo shar: over-writing existing file "'romand.hmp'"
  1081. fi
  1082. cat << \SHAR_EOF > 'romand.hmp'
  1083. 2699    2714    2728    2275    2719    2271    2718    2717
  1084. 2721    2722    2723    2725    2711    2724    2710    2720
  1085. 2700-2709
  1086. 2712    2713    2241    2726    2242    2715    2273
  1087. 2501-2526
  1088. 2223    804     2224    2262    999     2716
  1089. 2601-2626
  1090. 2225    2229    2226    2246    2729
  1091. SHAR_EOF
  1092. if test -f 'romanp.hmp'
  1093. then
  1094.     echo shar: over-writing existing file "'romanp.hmp'"
  1095. fi
  1096. cat << \SHAR_EOF > 'romanp.hmp'
  1097. 199     214     217     233     219     1271    234     231
  1098. 221     222     1219    225     211     224     210     220
  1099. 200-209
  1100. 212     213     1241    226     1242    215     1273
  1101. 1-26
  1102. 1223    809     1224    1262    997     230
  1103. 1-26
  1104. 1225    223     1226    1246    218
  1105.  
  1106. SHAR_EOF
  1107. if test -f 'romans.hmp'
  1108. then
  1109.     echo shar: over-writing existing file "'romans.hmp'"
  1110. fi
  1111. cat << \SHAR_EOF > 'romans.hmp'
  1112. 699     714     717     733     719     2271    734     731
  1113. 721     722     2219    725     711     724     710     720
  1114. 700-709
  1115. 712     713     2241    726     2242    715     2273
  1116. 501-526
  1117. 2223    804     2224    2262    999     730
  1118. 601-626
  1119. 2225    723     2226    2246    718
  1120.  
  1121. SHAR_EOF
  1122. if test -f 'romant.hmp'
  1123. then
  1124.     echo shar: over-writing existing file "'romant.hmp'"
  1125. fi
  1126. cat << \SHAR_EOF > 'romant.hmp'
  1127. 3199    3214    3228    2275    3219    2271    3218    3217
  1128. 3221    3222    3223    3225    3211    3224    3210    3220
  1129. 3200-3209
  1130. 3212    3213    2241    3226    2242    3215    2273
  1131. 3001-3026
  1132. 2223    804     2224    2262    999     3216
  1133. 3101-3126
  1134. 2225    2229    2226    2246    3229
  1135. SHAR_EOF
  1136. if test -f 'scriptc.hmp'
  1137. then
  1138.     echo shar: over-writing existing file "'scriptc.hmp'"
  1139. fi
  1140. cat << \SHAR_EOF > 'scriptc.hmp'
  1141. 2749    2764    2778    2275    2769    2271    2768    2767
  1142. 2771    2772    2773    2775    2761    2774    2760    2770
  1143. 2750-2759
  1144. 2762    2763    2241    2776    2242    2765    2273
  1145. 2551-2576
  1146. 2223    804     2224    2262    999     2766
  1147. 2651-2676
  1148. 2225    2229    2226    2246    2779
  1149. SHAR_EOF
  1150. if test -f 'scripts.hmp'
  1151. then
  1152.     echo shar: over-writing existing file "'scripts.hmp'"
  1153. fi
  1154. cat << \SHAR_EOF > 'scripts.hmp'
  1155. 699     2764    2778    733     2769    2271    2768    2767
  1156. 2771    2772    2773    725     2761    724     710     2770
  1157. 2750-2759
  1158. 2762    2763    2241    726     2242    2765    2273
  1159. 551-576
  1160. 2223    804     2224    2262    999     2766
  1161. 651-676
  1162. 2225    723     2226    2246    718
  1163.  
  1164. SHAR_EOF
  1165. #    End of shell archive
  1166. exit 0
  1167.  
  1168.